function subarraySum(nums: number[], k: number): number {
    // 哈希表存储前缀和出现的次数
    const prefixSumMap = new Map<number, number>();
    // 初始化：前缀和为0出现1次（空数组）
    prefixSumMap.set(0, 1);

    let count = 0;
    let prefixSum = 0;

    for (let i = 0; i < nums.length; i++) {
        prefixSum += nums[i];

        // 如果存在前缀和等于 (prefixSum - k)，说明存在子数组和为k
        if (prefixSumMap.has(prefixSum - k)) {
            count += prefixSumMap.get(prefixSum - k)!;
        }

        // 更新当前前缀和的出现次数
        prefixSumMap.set(prefixSum, (prefixSumMap.get(prefixSum) || 0) + 1);
    }

    return count;
}

function fn(nums: number[], k: number): number {
    let count = 0;
    const prefixSumMap = new Map<number, number>();

    prefixSumMap.set(0, 1);

    let prefixSum = 0;
    for (let i = 0; i < nums.length; i++) {
        prefixSum += nums[i];
        if (prefixSumMap.has(prefixSum - k)) {
            count += prefixSumMap.get(prefixSum - k)!;
        }

        prefixSumMap.set(prefixSum, (prefixSumMap.get(prefixSum) || 0) + 1);
    }

    return count;
}
